package vista;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.List;
import java.util.ArrayList;

import modelo.Juego;
import modelo.geografia.Ciudad;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;


public class VistaPoliciaViajar extends JPanel{
	
	private static final long serialVersionUID = -839530366557234115L;
	private ArrayList<JButton> botones;
	private int cantidadDeCiudades;
	private List<Ciudad> ciudadesAOfrecer;
	private int xOrigen, yOrigen, xDestino, yDestino;
	private int demora;
	private int numeroTramoDeRectaMapa;
	private boolean viajando;
	
	public VistaPoliciaViajar(Juego juego){
		this.setLayout(new FlowLayout());
		this.setBackground(Color.black);
		ciudadesAOfrecer= new ArrayList<Ciudad>();
		ciudadesAOfrecer = juego.ofrecerCiudadesAlPolicia();
		cantidadDeCiudades = ciudadesAOfrecer.size();
		botones = new ArrayList<JButton>();
		for(int i=0; i< cantidadDeCiudades; i++){
			String nombre = ciudadesAOfrecer.get(i).getNombre();
			JButton botonCiudad = new JButton(nombre);
			botones.add(botonCiudad);
			this.add(botonCiudad);
		}
		VistaMenuPrincipal.obtenerInstancia().getPanelInfIzq().add(this, "vistaPoliciaViajar");		
	}
	public void paintComponent(Graphics g){
		Dimension tamano = getSize();
        g.setColor(Color.black);
        g.fill3DRect(0, 0, tamano.width, tamano.height, false);
        ImageIcon imagen = new ImageIcon("img/planisferio.png");
        g.drawImage(imagen.getImage(),0,70,tamano.width,330,null);
        setOpaque(false);
	}
	public ArrayList<JButton> getBotones(){
		return botones;
	}
	public int getCantidadDeCiudades(){
		return cantidadDeCiudades;
	}
	public List<Ciudad> getCiudadesAOfrecer(){
		return ciudadesAOfrecer;
	}
	public void dibujar(int i){
		int xIntervalo = (xOrigen - xDestino)/demora;
		int yIntervalo = (yOrigen - yDestino)/demora;
		int xIntermedioOrigen = xOrigen - xIntervalo * i;
		int yIntermedioOrigen = yOrigen - yIntervalo * i;
		int xIntermedioDestino = xOrigen - xIntervalo * (i+1);
		int yIntermedioDestino = yOrigen - yIntervalo * (i+1);
		Graphics2D g = (Graphics2D)this.getGraphics();
		g.setStroke(new BasicStroke(3));
		g.setColor(Color.GREEN);
		g.drawLine(xIntermedioOrigen, yIntermedioOrigen, xIntermedioDestino, yIntermedioDestino);
		this.revalidate();
		if (i==(demora-1)) setearViajandoFalse();
	}
	public void dibujarTramo(){
		if (viajando){
				dibujar(numeroTramoDeRectaMapa);
				numeroTramoDeRectaMapa++;
		}
	}
	public void setearViajandoFalse(){
		this.viajando = false;
		numeroTramoDeRectaMapa = 0;
	}
	public boolean estaViajando(){
		return viajando;
	}
	public void setearDatosRectaADibujar(Juego juego, VistaPoliciaViajar vista, int indicePaisEnLista) {
		//Obtengo los datos de las latitudes y longitudes de las ciudades y
		//los paso a un sistema de referencia positivo
		int latitudOrigen = (int)juego.getPolicia().getCiudadActual().getPosicion().getLatitudEnGrados() +  90;
		int longitudOrigen = (int)juego.getPolicia().getCiudadActual().getPosicion().getLongitudEnGrados() + 180;
		int latitudDestino = (int)vista.getCiudadesAOfrecer().get(indicePaisEnLista).getPosicion().getLatitudEnGrados() + 90;
		int longitudDestino = (int)vista.getCiudadesAOfrecer().get(indicePaisEnLista).getPosicion().getLongitudEnGrados() + 180;
		//Calculo el numero de horas que tarda en ir de una ciudad a la otra(demora)
		int distanciaEnKm = juego.calcularDistanciaEntreCiudades(juego.getPolicia().getCiudadActual(), vista.getCiudadesAOfrecer().get(indicePaisEnLista));
		int velocidadEnKmPorHora = juego.getPolicia().grado().getVelocidadDeViaje();
		int horasPerdidasEnElViaje = distanciaEnKm/velocidadEnKmPorHora;	
		//Segun la dimension de la pantalla y la imagen, transformo de grados
		//a pixeles
		Dimension tamano = this.getSize();
		this.demora = horasPerdidasEnElViaje;
		xOrigen = (tamano.width * longitudOrigen) / 360 - 25;
		yOrigen = (330 + 70) - (330 * latitudOrigen) / 180 + 35;
		xDestino = (tamano.width * longitudDestino) / 360 - 25;
		yDestino = (330 + 70) - (330 * latitudDestino) / 180 + 35;
	    viajando = true;
	}
}
